{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 17,
   "id": "initial_id",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-06-14T10:53:17.725885Z",
     "start_time": "2025-06-14T10:53:17.722540Z"
    },
    "collapsed": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[0 0 1]\n"
     ]
    }
   ],
   "source": [
    "# 阶跃函数\n",
    "import numpy as np\n",
    "\n",
    "def step_function(x):\n",
    "    return np.array(x > 0, dtype=int)\n",
    "A = np.array([-1.0, 0.0, 1.0])\n",
    "print(step_function(A))  # [0 0 1]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "id": "7a5cda78f66fdfdb",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-06-14T10:56:04.388097Z",
     "start_time": "2025-06-14T10:56:04.080839Z"
    },
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 阶跃函数的图形\n",
    "\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "def step_function(x):\n",
    "    return np.array(x>0, dtype=int)\n",
    "\n",
    "# 函数全称\n",
    "# \n",
    "# numpy.arange([start, ]stop, [step, ]dtype=None)\n",
    "# \n",
    "# 参数说明\n",
    "# \t•\tstart：起始值（包含），可选，默认是 0。\n",
    "# \t•\tstop：终止值（不包含）。\n",
    "# \t•\tstep：步长，默认为 1。\n",
    "# \t•\tdtype：数组的数据类型（可选）。\n",
    "x = np.arange(-5.0, 5.0, 0.1)\n",
    "y = step_function(x)\n",
    "plt.plot(x,y)\n",
    "plt.ylim(-0.1, 1.1)  # y轴范围\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "id": "9d97691249573fb3",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-06-14T11:05:22.458764Z",
     "start_time": "2025-06-14T11:05:22.451082Z"
    },
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([0.26894142, 0.73105858, 0.88079708])"
      ]
     },
     "execution_count": 19,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# sigmoid 函数的实现\n",
    "def sigmoid(x):\n",
    "    return 1 / (1 + np.exp(-x))\n",
    "x = np.array([-1.0, 1.0, 2.0])\n",
    "sigmoid(x)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "id": "ab9ba95adcef0b50",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-06-14T11:33:12.802815Z",
     "start_time": "2025-06-14T11:33:12.741545Z"
    },
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "image/png": "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EQAAYCvCCAAAsBVhBAAA2IowAgAAbEUYAQAAtiKMAAAAWxFGAACArQgjAADAVoQRAABgK8IIAACwFWEEAADYijACAABsRRgBAAC2IowAAABbEUYAAICtCCMAAMBWhBEAAGArwggAALAVYQQAANiKMAIAAGxFGAEAALYKlAdwuVzmsaioyO5SAABAHR353D7yOe7RYaS4uNg8pqSk2F0KAAA4jc/xmJiYE37dz3WquOIGnE6n9uzZo6ioKPn5+cnXWUnTCmZZWVmKjo62uxyvxu+66fC7bjr8rpuOr/+uXS6XCSJJSUny9/f37JER6wdITk62uwy3Y/3F9sW/3Hbgd910+F03HX7XTceXf9cxJxkROYIGVgAAYCvCCAAAsBVhxAOFhIRoypQp5hGNi9910+F33XT4XTcdftd14xENrAAAwHsxMgIAAGxFGAEAALYijAAAAFsRRgAAgK0II16ioqJCffr0MSvUrlmzxu5yvM7OnTt16623ql27dgoLC1OHDh1Mh3xlZaXdpXmFGTNmKDU1VaGhoRo0aJCWL19ud0leadq0aRowYIBZzTo+Pl4jRozQli1b7C7L6z3++OPmvfmee+6xuxS3RRjxEvfdd59ZbheNY/Pmzea2BH//+9+1YcMGPfvss5o5c6buv/9+u0vzeHPnztW4ceNMuFu1apXS0tI0bNgw5ebm2l2a1/nqq69011136bvvvtPChQtVVVWlSy65RKWlpXaX5rV++OEH877Ru3dvu0txb9bUXni2+fPnu7p27erasGGDNU3btXr1artL8glPPvmkq127dnaX4fEGDhzouuuuu2qOHQ6HKykpyTVt2jRb6/IFubm55j3jq6++srsUr1RcXOzq1KmTa+HCha7zzjvPNXbsWLtLcluMjHi4nJwc3X777XrzzTcVHh5udzk+pbCwULGxsXaX4dGsy1wrV67U0KFDa92LyjpetmyZrbX5yt9hC3+PG4c1CnXFFVfU+vsND75RHo7PWq/u5ptv1h133KH+/fubvgY0jfT0dD3//PP661//ancpHi0/P18Oh0MJCQm1zlvH1qUxNB7rsqPVw3DWWWepZ8+edpfjdebMmWMuO1qXaXBqjIy4oQkTJphmp5Nt1hu19WFo3Zp54sSJdpfs9b/ro+3evVuXXnqprrvuOjMqBXjq/9rXr19vPjTRsLKysjR27Fj9+9//Nk3ZODWWg3dDeXl52rdv30mf0759e/3mN7/Rxx9/bD4wj7D+lxkQEKAbb7xRb7zxRhNU6xu/6+DgYLO/Z88enX/++Ro8eLBef/11c0kBv+wyjXV58Z133jEzO44YPXq0Dhw4oA8//NDW+rzVH//4R/O7/frrr80MMTSsDz74QL/61a/Me/HR783We7X1nmHNfjz6ayCMeLTMzEwVFRXVHFsflNYsBOuN3ZoemZycbGt93sYaEbngggvUr18//etf/+LNpIFYf1cHDhxoRvqOXD5o06aN+cC0Rq7QcKy3+7vvvlvvv/++lixZok6dOtldkleyRqx/+umnWufGjBmjrl27avz48VwWOw56RjyY9YZ9tMjISPNorYFBEGn4IGKNiLRt29b0iVgjKkckJibaWpuns6b1WiMhVt+TFUqmT59upppab95o+Eszs2fPNqMi1loj2dnZ5nxMTIxZPwcNw/rd/jxwREREqEWLFgSREyCMAHVgrclgNa1a28+DHoOLv8zIkSNNuJs8ebL5cLQW71uwYMExTa345V566SXzaAXro/3jH/8wzfCAXbhMAwAAbEX3HQAAsBVhBAAA2IowAgAAbEUYAQAAtiKMAAAAWxFGAACArQgjAADAVoQRAABgK8IIAACwFWEEAADYijACAABsRRgBAACy0/8HUAk+XRiK5e4AAAAASUVORK5CYII=",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# sigmoid 函数的图形\n",
    "x = np.arange(-5.0, 5.0, 0.1)\n",
    "y = sigmoid(x)\n",
    "plt.plot(x, y)\n",
    "plt.ylim(-0.1, 1.1) # 指定 y轴的范围\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "id": "a608d26c38a32ad2",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-06-14T12:01:46.470915Z",
     "start_time": "2025-06-14T12:01:46.406710Z"
    },
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[0. 1. 2.]\n"
     ]
    },
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# ReLu函数\n",
    "def relu(x):\n",
    "    return np.maximum(0, x)\n",
    "\n",
    "x = np.array([-1.0, 1.0, 2.0])\n",
    "print(relu(x))  # [0. 1. 2.]\n",
    "\n",
    "# ReLu函数的图形\n",
    "x = np.arange(-5.0, 5.0, 0.1)\n",
    "y = relu(x)\n",
    "plt.plot(x, y)\n",
    "plt.ylim(-0.1, 5.1)  # y轴范围\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "id": "be2422ba65d3e664",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-06-14T10:14:00.911598Z",
     "start_time": "2025-06-14T10:14:00.900411Z"
    },
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[1 2 3]\n",
      "(3,)\n",
      "1\n"
     ]
    }
   ],
   "source": [
    "# 多维数组\n",
    "\n",
    "import numpy as np\n",
    "\n",
    "A = np.array([1,2,3])\n",
    "print(A)\n",
    "print(A.shape) #   (3,)\n",
    "print(A.ndim)  # 1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "ee5e55b4e9e69409",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-06-14T08:16:32.358340Z",
     "start_time": "2025-06-14T08:16:32.354689Z"
    },
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(2, 2)\n",
      "(2, 2)\n",
      "[[19 22]\n",
      " [43 50]]\n",
      "(2, 3)\n",
      "(3, 2)\n",
      "[[22 28]\n",
      " [49 64]]\n",
      "[[ 9 12 15]\n",
      " [19 26 33]\n",
      " [29 40 51]]\n"
     ]
    }
   ],
   "source": [
    "# 矩阵乘法\n",
    "# 2 * 2 矩阵乘法\n",
    "A = np.array([[1,2],[3,4]])\n",
    "print(A.shape)\n",
    "B = np.array([[5,6],[7,8]])\n",
    "print(B.shape) \n",
    "C = np.dot(A,B)\n",
    "print(C)\n",
    "\n",
    "# 2 * 3 和 3 * 2 矩阵乘法\n",
    "A = np.array([[1,2,3], [4,5,6]])\n",
    "print(A.shape)\n",
    "B = np.array([[1,2],[3,4],[5,6]])\n",
    "print(B.shape)\n",
    "C = np.dot(A,B)\n",
    "print(C)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "ae244b7c04c65086",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-06-14T08:26:24.388526Z",
     "start_time": "2025-06-14T08:26:24.385277Z"
    },
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[ 5 11 17]\n"
     ]
    }
   ],
   "source": [
    "X = np.array([1,2])\n",
    "W = np.array([[1,3,5],[2,4,6]])\n",
    "Y = np.dot(X, W)\n",
    "print(Y)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "id": "660d4bb33933d3ff",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-06-14T12:04:20.872621Z",
     "start_time": "2025-06-14T12:04:20.868177Z"
    },
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(2,)\n",
      "(2, 3)\n",
      "(3,)\n",
      "[0.3 0.7 1.1]\n",
      "[0.57444252 0.66818777 0.75026011]\n"
     ]
    }
   ],
   "source": [
    "# 三成神经网络的实现\n",
    "# 第0层到1层\n",
    "X = np.array([1.0,0.5])\n",
    "W1 = np.array([[0.1,0.3,0.5],[0.2,0.4,0.6]])\n",
    "B1 = np.array([0.1,0.2,0.3])\n",
    "\n",
    "print(X.shape)\n",
    "print(W1.shape)\n",
    "print(B1.shape)\n",
    "\n",
    "A1 = np.dot(X,W1) + B1\n",
    "print(A1)\n",
    "# 激活函数\n",
    "Z1= sigmoid(A1)\n",
    "print(Z1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "id": "596f72fea1c0fa27",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-06-14T12:17:34.623583Z",
     "start_time": "2025-06-14T12:17:34.619959Z"
    },
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(3,)\n",
      "(3, 2)\n",
      "(2,)\n"
     ]
    }
   ],
   "source": [
    "# 第1层到第2层\n",
    "W2 = np.array([[0.1,0.4],[0.2,0.5],[0.3,0.6]])\n",
    "B2 = np.array([0.1,0.2])\n",
    "print(Z1.shape)\n",
    "print(W2.shape)\n",
    "print(B2.shape)\n",
    "\n",
    "A2 = np.dot(Z1, W2) + B2\n",
    "Z2 = sigmoid(A2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "19717490aa2af776",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-06-14T12:35:53.437516Z",
     "start_time": "2025-06-14T12:35:53.420373Z"
    },
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[0.31682708 0.69627909]\n"
     ]
    }
   ],
   "source": [
    "# 第二层到输出层\n",
    "def identity_function(x):\n",
    "    return x\n",
    "W3 = np.array([[0.1, 0.3], [0.2, 0.4]])\n",
    "B3 = np.array([0.1, 0.2])\n",
    "A3 = np.dot(Z2, W3) + B3\n",
    "Y = identity_function(A3)\n",
    "print(Y)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "id": "d24d0615d146202d",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-06-14T15:28:51.434028Z",
     "start_time": "2025-06-14T15:28:51.431117Z"
    },
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "# # 三层神经网络的完整实现\n",
    "# def init_network():\n",
    "#     network1 = {}\n",
    "#     network1['W1'] = np.array([[0.1, 0.3, 0.5], [0.2, 0.4, 0.6]])\n",
    "#     network1['B1'] = np.array([0.1, 0.2, 0.3])\n",
    "#     network1['W2'] = np.array([[0.1, 0.4], [0.2, 0.5], [0.3, 0.6]])\n",
    "#     network1['B2'] = np.array([0.1, 0.2])\n",
    "#     network1['W3'] = np.array([[0.1, 0.3], [0.2, 0.4]])\n",
    "#     network1['B3'] = np.array([0.1, 0.2])\n",
    "#     return network1\n",
    "# def sigmoid(x):\n",
    "#     return 1 / (1 + np.exp(-x))\n",
    "# def identity_function(x):\n",
    "#     return x\n",
    "# def predict(network, x):\n",
    "#     W1, B1 = network['W1'], network['B1']\n",
    "#     W2, B2 = network['W2'], network['B2']\n",
    "#     W3, B3 = network['W3'], network['B3']\n",
    "# \n",
    "#     A1 = np.dot(x, W1) + B1\n",
    "#     Z1 = sigmoid(A1)\n",
    "#     A2 = np.dot(Z1, W2) + B2\n",
    "#     Z2 = sigmoid(A2)\n",
    "#     A3 = np.dot(Z2, W3) + B3\n",
    "#     Y = identity_function(A3)\n",
    "#     \n",
    "#     return Y\n",
    "# # 测试网络\n",
    "# network = init_network()\n",
    "# x = np.array([1.0, 0.5])\n",
    "# y = predict(network, x)\n",
    "# print(y)  # 输出预测结果"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "279b104384be252f",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-06-14T15:33:40.083686Z",
     "start_time": "2025-06-14T15:33:40.053917Z"
    },
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[0.31682708 0.69627909]\n"
     ]
    }
   ],
   "source": [
    "import numpy as np\n",
    "\n",
    "# 恒等函数\n",
    "def identity_function(x):\n",
    "    return x\n",
    "\n",
    "# sigmoid 函数\n",
    "def sigmoid(X):\n",
    "    return 1/(1+np.exp(-X))\n",
    "\n",
    "def init_network():\n",
    "    network = {}\n",
    "    network['W1'] = np.array([[0.1, 0.3, 0.5], [0.2, 0.4, 0.6]])\n",
    "    network['b1'] = np.array([0.1, 0.2, 0.3])\n",
    "    network['W2'] = np.array([[0.1, 0.4], [0.2, 0.5], [0.3, 0.6]])\n",
    "    network['b2'] = np.array([0.1, 0.2])\n",
    "    network['W3'] = np.array([[0.1, 0.3], [0.2, 0.4]])\n",
    "    network['b3'] = np.array([0.1, 0.2])\n",
    "    return network\n",
    "\n",
    "def forward(network,x):\n",
    "    W1, W2, W3 = network['W1'], network['W2'],network['W3']\n",
    "    b1, b2, b3 = network['b1'], network['b2'], network['b3']\n",
    "    a1 = np.dot(x, W1) + b1\n",
    "    z1 = sigmoid(a1)\n",
    "    a2 = np.dot(z1, W2) + b2\n",
    "    z2 = sigmoid(a2)\n",
    "    a3 = np.dot(z2, W3) + b3\n",
    "    y = identity_function(a3)\n",
    "    return y\n",
    "\n",
    "# 测试网络\n",
    "network = init_network()\n",
    "x = np.array([1.0, 0.5])\n",
    "y = forward(network, x)\n",
    "print(y)  # 输出预测结果"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "1bbb19e1bd8ace88",
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[ 1.34985881 18.17414537 54.59815003]\n",
      "74.1221542101633\n",
      "[0.01821127 0.24519181 0.73659691]\n",
      "[0.01821127 0.24519181 0.73659691]\n"
     ]
    },
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# softmax 函数\n",
    "\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "a = np.array([0.3, 2.9, 4.0])\n",
    "exp_a = np.exp(a)\n",
    "print(exp_a)  # [ 1.34985881 18.17414537 54.59815003]\n",
    "\n",
    "# 指数函数的和\n",
    "sum_exp_a = np.sum(exp_a)\n",
    "print(sum_exp_a)  # 74.122154214\n",
    "\n",
    "y = exp_a / sum_exp_a\n",
    "print(y)  # [0.01803296 0.24519181 0.73677523]\n",
    "\n",
    "# softmax 函数的实现\n",
    "def softmax(a):\n",
    "    exp_a = np.exp(a)\n",
    "    sum_exp_a = np.sum(exp_a)\n",
    "    y = exp_a / sum_exp_a\n",
    "    return y\n",
    "# 测试 softmax 函数\n",
    "a = np.array([0.3, 2.9, 4.0])\n",
    "y = softmax(a)\n",
    "print(y)  # [0.01803296 0.24519181 0.73677523]\n",
    "# softmax 函数的图形\n",
    "x = np.arange(-5.0, 5.0, 0.1)\n",
    "y = softmax(x)\n",
    "plt.plot(x, y)\n",
    "plt.ylim(-0.1, 1.1)  # y轴范围\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "id": "cbc898ff",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[9.99954600e-01 4.53978686e-05 2.06106005e-09]\n",
      "1.0\n"
     ]
    }
   ],
   "source": [
    "# softmax 函数优化 - 防止溢出\n",
    "def softmax(a):\n",
    "    c = np.max(a) # 找到最大值\n",
    "    exp_a = np.exp(a - c)  # 减去最大值\n",
    "    sum_exp_a = np.sum(exp_a)\n",
    "    y = exp_a / sum_exp_a\n",
    "    return y\n",
    "# 测试优化后的 softmax 函数\n",
    "a = np.array([1010, 1000, 990])\n",
    "y = softmax(a)\n",
    "print(y)  # [0.99999969 0.00033546 0.00000085]\n",
    "result = np.sum(y)  # 1.0\n",
    "print(result)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "c2738f66",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.9.13"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
